import { getToken, setToken, removeToken, setTimestamp } from '@/utils/auth'
import { login, getUserInfo, getPhotoById } from '@/api/user'
const state = {
  token: getToken(), // 从缓存中获取token
  userInfo: {} // 用户信息,不能设置为null,否则映射null.xxx的时候将会报错
}
const mutations = {
  // 设置token
  setToken(state, token) {
    state.token = token
    setToken(token) // 在缓存中存放token
  },
  // 移除token
  removeToken(state) {
    state.token = null
    removeToken() // 移除缓存中的token
  },
  // 设置用户信息
  setUserInfo(state, result) {
    state.userInfo = result
  },
  // 删除用户信息
  removeUserInfo(state) {
    state.userInfo = {}
  }
}
const actions = {
  // 发送登录请求
  async login({ commit }, data) {
    const result = await login(data)
    // 设置时间戳
    setTimestamp()
    // 调用mutations里的setToken 设置token以及缓存token
    commit('setToken', result)
  },
  // 退出登录
  logout({ commit }) {
    commit('removeToken')
    commit('removeUserInfo')
  },
  // 获取用户信息
  async getUserInfo({ commit }) {
    // 发送请求,获取基本信息
    const result = await getUserInfo()
    // 发送请求,获取头像
    const photo = await getPhotoById(result.userId)
    commit('setUserInfo', { ...result, ...photo })
  }
}
export default {
  namespaced: true,
  state,
  mutations,
  actions
}

